fix waterfall bug

FFIB 6 years ago
parent
commit
6ba1c2f573

BIN
.DS_Store


BIN
PaiAi/.DS_Store


+ 3 - 4
PaiAi/Cartfile

@@ -1,7 +1,6 @@
1 1
 github "Yalantis/PullToRefresh"
2
-github "ReactiveX/RxSwift"
2
+github "ReactiveX/RxSwift" ~> 5.0
3 3
 github "onevcat/Kingfisher" ~> 5.0
4
-github "Alamofire/Alamofire" "5.0.0-beta.3"
5
-github "stephencelis/SQLite.swift" ~> 0.11.5
4
+github "Alamofire/Alamofire" "5.0.0-beta.1"
6 5
 github "tristanhimmelman/ObjectMapper" ~> 3.4
7
-github "RxSwiftCommunity/RxDataSources" ~> 3.0
6
+github "RxSwiftCommunity/RxDataSources" ~> 4.0

+ 4 - 5
PaiAi/Cartfile.resolved

@@ -1,7 +1,6 @@
1
-github "Alamofire/Alamofire" "5.0.0-beta.3"
2
-github "ReactiveX/RxSwift" "4.4.2"
3
-github "RxSwiftCommunity/RxDataSources" "3.1.0"
1
+github "Alamofire/Alamofire" "5.0.0-beta.1"
2
+github "ReactiveX/RxSwift" "5.0.1"
3
+github "RxSwiftCommunity/RxDataSources" "4.0.1"
4 4
 github "Yalantis/PullToRefresh" "3.1"
5
-github "onevcat/Kingfisher" "5.3.1"
6
-github "stephencelis/SQLite.swift" "0.11.5"
5
+github "onevcat/Kingfisher" "5.5.0"
7 6
 github "tristanhimmelman/ObjectMapper" "3.4.2"

+ 130 - 127
PaiAi/Paiai.xcodeproj/project.pbxproj

@@ -9,35 +9,17 @@
9 9
 /* Begin PBXBuildFile section */
10 10
 		0500C25E21E72E45009A7013 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 05E80E2F21DF65D4006368C4 /* Assets.xcassets */; };
11 11
 		0500C26521E8644E009A7013 /* NavigationBackViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0500C26421E8644E009A7013 /* NavigationBackViewController.swift */; };
12
-		0505ACF921DF104500404071 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0505ACF821DF104500404071 /* SystemConfiguration.framework */; };
13
-		0505ACFB21DF106000404071 /* libsqlite3.0.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 0505ACFA21DF106000404071 /* libsqlite3.0.tbd */; };
14
-		0505ACFD21DF106F00404071 /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 0505ACFC21DF106E00404071 /* libc++.tbd */; };
15
-		0505ACFF21DF107600404071 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0505ACFE21DF107600404071 /* Security.framework */; };
16
-		0505AD0121DF107D00404071 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0505AD0021DF107D00404071 /* CoreTelephony.framework */; };
17
-		0505AD0321DF108300404071 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0505AD0221DF108300404071 /* CFNetwork.framework */; };
18
-		0505AD0521DF109E00404071 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 0505AD0421DF109E00404071 /* libz.tbd */; };
19 12
 		0505AD0621DF342F00404071 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 0505AD0421DF109E00404071 /* libz.tbd */; };
20 13
 		0505AD0921DF345E00404071 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0505ACFE21DF107600404071 /* Security.framework */; };
21 14
 		0505AD0A21DF347400404071 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0505AD0221DF108300404071 /* CFNetwork.framework */; };
22 15
 		0505AD0B21DF348F00404071 /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 0505ACFC21DF106E00404071 /* libc++.tbd */; };
23 16
 		0505AD0C21DF34B600404071 /* libsqlite3.0.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 0505ACFA21DF106000404071 /* libsqlite3.0.tbd */; };
24 17
 		0505AD0D21DF34E100404071 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0505AD0021DF107D00404071 /* CoreTelephony.framework */; };
25
-		050D717E2253162C0076CE06 /* RxDataSources.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05130FC421CA1997004EF1BE /* RxDataSources.framework */; };
26 18
 		050D7181225317AD0076CE06 /* PaiaiUIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05130F2E21C94B32004EF1BE /* PaiaiUIKit.framework */; };
27 19
 		050D7182225317AD0076CE06 /* PaiaiUIKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 05130F2E21C94B32004EF1BE /* PaiaiUIKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
28 20
 		050D7183225317AD0076CE06 /* PaiaiDataKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05130F6A21C95373004EF1BE /* PaiaiDataKit.framework */; };
29
-		050D7184225317AD0076CE06 /* PaiaiDataKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 05130F6A21C95373004EF1BE /* PaiaiDataKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
30 21
 		050D7187225317AD0076CE06 /* Paiai_iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05130F8E21C9E5E8004EF1BE /* Paiai_iOS.framework */; };
31 22
 		050D7188225317AD0076CE06 /* Paiai_iOS.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 05130F8E21C9E5E8004EF1BE /* Paiai_iOS.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
32
-		050D718E22531AF40076CE06 /* RxDataSources.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 050D718D22531AF40076CE06 /* RxDataSources.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
33
-		050D719022531B180076CE06 /* Kingfisher.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 050D718F22531B180076CE06 /* Kingfisher.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
34
-		050D719222531B360076CE06 /* Alamofire.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 050D719122531B360076CE06 /* Alamofire.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
35
-		050D719522531B520076CE06 /* ObjectMapper.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 050D719422531B520076CE06 /* ObjectMapper.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
36
-		050D719722531B650076CE06 /* PullToRefresh.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 050D719622531B650076CE06 /* PullToRefresh.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
37
-		050D719922531B780076CE06 /* RxCocoa.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 050D719822531B780076CE06 /* RxCocoa.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
38
-		050D719B22531B860076CE06 /* RxSwift.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 050D719A22531B860076CE06 /* RxSwift.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
39
-		050D719D22531BA60076CE06 /* SQLite.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 050D719C22531BA60076CE06 /* SQLite.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
40
-		050D719E22531BBF0076CE06 /* Differentiator.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 05130FBD21CA194B004EF1BE /* Differentiator.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
41 23
 		05130F4021C94B33004EF1BE /* PaiaiUIKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 05130F3021C94B32004EF1BE /* PaiaiUIKit.h */; settings = {ATTRIBUTES = (Public, ); }; };
42 24
 		05130F5721C94C12004EF1BE /* AlertAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05130F4F21C94C12004EF1BE /* AlertAnimator.swift */; };
43 25
 		05130F5921C94C12004EF1BE /* AlertViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05130F5121C94C12004EF1BE /* AlertViewController.swift */; };
@@ -122,14 +104,6 @@
122 104
 		0513104121CA1B67004EF1BE /* MessageViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 059AA62A21BA85B000485188 /* MessageViewModel.swift */; };
123 105
 		0513104221CA1B67004EF1BE /* CreateGroupViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05A0E8A821C782D700EAB9A2 /* CreateGroupViewModel.swift */; };
124 106
 		0513104321CA1B67004EF1BE /* ScanQRViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05130F2721C88D35004EF1BE /* ScanQRViewModel.swift */; };
125
-		0513104521CA1BAD004EF1BE /* ObjectMapper.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05130FC921CA1997004EF1BE /* ObjectMapper.framework */; };
126
-		0513104821CA1BAD004EF1BE /* RxCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05130FC221CA1997004EF1BE /* RxCocoa.framework */; };
127
-		0513104921CA1BAD004EF1BE /* RxDataSources.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05130FC421CA1997004EF1BE /* RxDataSources.framework */; };
128
-		0513104A21CA1BAD004EF1BE /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05130FC321CA1997004EF1BE /* RxSwift.framework */; };
129
-		0513104C21CA1BAD004EF1BE /* SQLite.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05130FC821CA1997004EF1BE /* SQLite.framework */; };
130
-		0513104E21CA1BED004EF1BE /* RxCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05130FC221CA1997004EF1BE /* RxCocoa.framework */; };
131
-		0513104F21CA1BED004EF1BE /* RxDataSources.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05130FC421CA1997004EF1BE /* RxDataSources.framework */; };
132
-		0513105021CA1BED004EF1BE /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05130FC321CA1997004EF1BE /* RxSwift.framework */; };
133 107
 		0513105821CA1D50004EF1BE /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A69FFB8E1E7018CC0006FEE0 /* Main.storyboard */; };
134 108
 		0513105921CA1D50004EF1BE /* GroupDetail.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A69FFB8A1E7018CC0006FEE0 /* GroupDetail.storyboard */; };
135 109
 		0513105A21CA1D50004EF1BE /* Message.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A69FFB901E7018CC0006FEE0 /* Message.storyboard */; };
@@ -138,7 +112,6 @@
138 112
 		0513105D21CA1D95004EF1BE /* PaiaiDataKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05130F6A21C95373004EF1BE /* PaiaiDataKit.framework */; };
139 113
 		0513105E21CA1D95004EF1BE /* PaiaiUIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05130F2E21C94B32004EF1BE /* PaiaiUIKit.framework */; };
140 114
 		0513106021CA1E53004EF1BE /* UIStoryboardExt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0513105F21CA1E53004EF1BE /* UIStoryboardExt.swift */; };
141
-		0513106221CA22B6004EF1BE /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0513106121CA22B5004EF1BE /* Alamofire.framework */; };
142 115
 		0513106521CA290B004EF1BE /* UserDefaultsExt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0543274421C68C1900C6388D /* UserDefaultsExt.swift */; };
143 116
 		0513106621CA290B004EF1BE /* StringExt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0543274121C68C1900C6388D /* StringExt.swift */; };
144 117
 		0513106721CA290B004EF1BE /* DateExt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0543274721C68C1900C6388D /* DateExt.swift */; };
@@ -154,20 +127,11 @@
154 127
 		0513109921CA3915004EF1BE /* NotificationExt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0513109021CA3915004EF1BE /* NotificationExt.swift */; };
155 128
 		0513109A21CA3915004EF1BE /* QRCodeScanView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0513109121CA3915004EF1BE /* QRCodeScanView.swift */; };
156 129
 		0513109B21CA3915004EF1BE /* QRCodeConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0513109221CA3915004EF1BE /* QRCodeConfiguration.swift */; };
157
-		0513109C21CA4103004EF1BE /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0513106121CA22B5004EF1BE /* Alamofire.framework */; };
158
-		0513109F21CA4103004EF1BE /* ObjectMapper.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05130FC921CA1997004EF1BE /* ObjectMapper.framework */; };
159
-		051310A221CA4103004EF1BE /* RxCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05130FC221CA1997004EF1BE /* RxCocoa.framework */; };
160
-		051310A421CA4103004EF1BE /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05130FC321CA1997004EF1BE /* RxSwift.framework */; };
161
-		051310A621CA4103004EF1BE /* SQLite.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05130FC821CA1997004EF1BE /* SQLite.framework */; };
162
-		051310B421CB5EC3004EF1BE /* Kingfisher.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 051310B321CB5EC3004EF1BE /* Kingfisher.framework */; };
163
-		051310B521CB5EDD004EF1BE /* Kingfisher.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 051310B321CB5EC3004EF1BE /* Kingfisher.framework */; };
164 130
 		051310B621CB675A004EF1BE /* UIImageView+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0543276621C68C3300C6388D /* UIImageView+Kingfisher.swift */; };
165 131
 		051310B821CB6958004EF1BE /* UserInfoStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 051310B721CB6958004EF1BE /* UserInfoStore.swift */; };
166 132
 		051310C021CB6EF4004EF1BE /* UserInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 051310BF21CB6EF4004EF1BE /* UserInfo.swift */; };
167 133
 		051FA6692276FA4300A5ECC2 /* BaseCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 051FA6682276FA4300A5ECC2 /* BaseCoordinator.swift */; };
168 134
 		051FA66C2277F03700A5ECC2 /* LoginCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 051FA66B2277F03700A5ECC2 /* LoginCoordinator.swift */; };
169
-		052BF1C821E344020010D270 /* PullToRefresh.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 052BF1C721E344020010D270 /* PullToRefresh.framework */; };
170
-		052BF1C921E344280010D270 /* PullToRefresh.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 052BF1C721E344020010D270 /* PullToRefresh.framework */; };
171 135
 		0530951B221AB3EC00408D34 /* GroupDetailMemeberView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0530951A221AB3EC00408D34 /* GroupDetailMemeberView.swift */; };
172 136
 		0535D6D921D32A89008D9403 /* WXUserInfoRemoteAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0535D6D821D32A89008D9403 /* WXUserInfoRemoteAPI.swift */; };
173 137
 		0535D6DB21D32A9E008D9403 /* GuestUserInfoRemoteAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0535D6DA21D32A9E008D9403 /* GuestUserInfoRemoteAPI.swift */; };
@@ -191,7 +155,6 @@
191 155
 		0569F6152200438C000A75CA /* Group.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0569F613220042AF000A75CA /* Group.storyboard */; };
192 156
 		0572B2C321E2FB3E00EAD2A2 /* WXApiObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 0572B2BD21E2FB3C00EAD2A2 /* WXApiObject.h */; settings = {ATTRIBUTES = (Public, ); }; };
193 157
 		0572B2C421E2FB3E00EAD2A2 /* WechatAuthSDK.h in Headers */ = {isa = PBXBuildFile; fileRef = 0572B2BE21E2FB3D00EAD2A2 /* WechatAuthSDK.h */; settings = {ATTRIBUTES = (Public, ); }; };
194
-		0572B2C621E2FB3E00EAD2A2 /* libWeChatSDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0572B2BF21E2FB3D00EAD2A2 /* libWeChatSDK.a */; };
195 158
 		0572B2C721E2FB3E00EAD2A2 /* WXApi.h in Headers */ = {isa = PBXBuildFile; fileRef = 0572B2C021E2FB3E00EAD2A2 /* WXApi.h */; settings = {ATTRIBUTES = (Public, ); }; };
196 159
 		0572B2C921E30D8000EAD2A2 /* PhotoCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 054863671FA326CB00A39DA0 /* PhotoCell.xib */; };
197 160
 		057317A221F5C6A0009B2FCE /* BottomDefaultItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 057317A121F5C6A0009B2FCE /* BottomDefaultItem.swift */; };
@@ -227,6 +190,20 @@
227 190
 		05B2C62B21D750F1008063B3 /* FeedbackRemoteAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05B2C62A21D750F1008063B3 /* FeedbackRemoteAPI.swift */; };
228 191
 		05B2C62F21D754BD008063B3 /* GroupDetailRemoteAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05B2C62E21D754BD008063B3 /* GroupDetailRemoteAPI.swift */; };
229 192
 		05B2C63121D75A1B008063B3 /* ContentResource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05B2C63021D75A1B008063B3 /* ContentResource.swift */; };
193
+		05B87D4F228E900A0098FE87 /* PaiaiDataKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 05130F6A21C95373004EF1BE /* PaiaiDataKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
194
+		05B87D5E228E94A70098FE87 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05DFDBEC228BE53100F4A7F7 /* Alamofire.framework */; };
195
+		05B87D5F228E94AA0098FE87 /* Kingfisher.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05DFDBED228BE53100F4A7F7 /* Kingfisher.framework */; };
196
+		05B87D60228E94AC0098FE87 /* ObjectMapper.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05DFDBF1228BE53200F4A7F7 /* ObjectMapper.framework */; };
197
+		05B87D61228E94E90098FE87 /* PullToRefresh.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05DFDBF0228BE53100F4A7F7 /* PullToRefresh.framework */; };
198
+		05B87D62228E94EB0098FE87 /* RxCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05DFDBEF228BE53100F4A7F7 /* RxCocoa.framework */; };
199
+		05B87D63228E94EE0098FE87 /* RxDataSources.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05DFDBEB228BE53100F4A7F7 /* RxDataSources.framework */; };
200
+		05B87D64228E94F00098FE87 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05DFDBEE228BE53100F4A7F7 /* RxSwift.framework */; };
201
+		05B87D6D228E9F140098FE87 /* RxRelay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05B87D6C228E9F140098FE87 /* RxRelay.framework */; };
202
+		05B87D6F228EA2820098FE87 /* Differentiator.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05B87D6E228EA2820098FE87 /* Differentiator.framework */; };
203
+		05BEBE3E228E51D800541855 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A69FFB8C1E7018CC0006FEE0 /* LaunchScreen.storyboard */; };
204
+		05BEBE60228E87B300541855 /* RxCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05DFDBEF228BE53100F4A7F7 /* RxCocoa.framework */; };
205
+		05BEBE62228E87C300541855 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0505ACF821DF104500404071 /* SystemConfiguration.framework */; };
206
+		05BEBE63228E87C700541855 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0505ACF821DF104500404071 /* SystemConfiguration.framework */; };
230 207
 		05C0CEF921F8567C00993DE2 /* AlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05C0CEF821F8567C00993DE2 /* AlertView.swift */; };
231 208
 		05C0CEFB21F85A7700993DE2 /* ActionSheetController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05C0CEFA21F85A7700993DE2 /* ActionSheetController.swift */; };
232 209
 		05C0D98E21D22119000B7B2A /* PhotoThumbupUserItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05C0D98D21D22119000B7B2A /* PhotoThumbupUserItem.swift */; };
@@ -251,6 +228,22 @@
251 228
 		05D3A3C621FF010900A29A20 /* WebViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05D3A3C521FF010900A29A20 /* WebViewController.swift */; };
252 229
 		05D3A3CD22000C3A00A29A20 /* GroupCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05D3A3CC22000C3900A29A20 /* GroupCoordinator.swift */; };
253 230
 		05D3A3D02200288400A29A20 /* Storyboarded.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05D3A3CF2200288400A29A20 /* Storyboarded.swift */; };
231
+		05DFDBF9228BE7A200F4A7F7 /* PullToRefresh.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05DFDBF0228BE53100F4A7F7 /* PullToRefresh.framework */; };
232
+		05DFDBFA228BE7A700F4A7F7 /* RxCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05DFDBEF228BE53100F4A7F7 /* RxCocoa.framework */; };
233
+		05DFDBFB228BE7AA00F4A7F7 /* RxDataSources.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05DFDBEB228BE53100F4A7F7 /* RxDataSources.framework */; };
234
+		05DFDBFC228BE7AE00F4A7F7 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05DFDBEE228BE53100F4A7F7 /* RxSwift.framework */; };
235
+		05DFDBFD228BE7CA00F4A7F7 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05DFDBEC228BE53100F4A7F7 /* Alamofire.framework */; };
236
+		05DFDBFE228BE7CC00F4A7F7 /* Kingfisher.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05DFDBED228BE53100F4A7F7 /* Kingfisher.framework */; };
237
+		05DFDBFF228BE7CE00F4A7F7 /* ObjectMapper.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05DFDBF1228BE53200F4A7F7 /* ObjectMapper.framework */; };
238
+		05DFDC00228BE7E400F4A7F7 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05DFDBEE228BE53100F4A7F7 /* RxSwift.framework */; };
239
+		05DFDC01228BE80000F4A7F7 /* libWeChatSDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0572B2BF21E2FB3D00EAD2A2 /* libWeChatSDK.a */; };
240
+		05DFDC02228BE81400F4A7F7 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 0505AD0421DF109E00404071 /* libz.tbd */; };
241
+		05DFDC03228BE81C00F4A7F7 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0505AD0221DF108300404071 /* CFNetwork.framework */; };
242
+		05DFDC04228BE82800F4A7F7 /* libsqlite3.0.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 0505ACFA21DF106000404071 /* libsqlite3.0.tbd */; };
243
+		05DFDC05228BE83500F4A7F7 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0505AD0021DF107D00404071 /* CoreTelephony.framework */; };
244
+		05DFDC06228BE83A00F4A7F7 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0505ACFE21DF107600404071 /* Security.framework */; };
245
+		05DFDC07228BE84700F4A7F7 /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 0505ACFC21DF106E00404071 /* libc++.tbd */; };
246
+		05DFDC08228BE8C600F4A7F7 /* RxDataSources.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05DFDBEB228BE53100F4A7F7 /* RxDataSources.framework */; };
254 247
 		05E80E3021DF65D5006368C4 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 05E80E2F21DF65D4006368C4 /* Assets.xcassets */; };
255 248
 		05ED11C52251A90000FF3758 /* PhotoPurchaseRemoteAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05ED11C42251A90000FF3758 /* PhotoPurchaseRemoteAPI.swift */; };
256 249
 		05ED11C72252165700FF3758 /* Notification+wxPay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05ED11C62252165700FF3758 /* Notification+wxPay.swift */; };
@@ -302,26 +295,25 @@
302 295
 			dstPath = "";
303 296
 			dstSubfolderSpec = 10;
304 297
 			files = (
305
-				050D719E22531BBF0076CE06 /* Differentiator.framework in Embed Frameworks */,
306
-				050D719D22531BA60076CE06 /* SQLite.framework in Embed Frameworks */,
307
-				050D719B22531B860076CE06 /* RxSwift.framework in Embed Frameworks */,
308
-				050D719922531B780076CE06 /* RxCocoa.framework in Embed Frameworks */,
309
-				050D719722531B650076CE06 /* PullToRefresh.framework in Embed Frameworks */,
310
-				050D719522531B520076CE06 /* ObjectMapper.framework in Embed Frameworks */,
311
-				050D719022531B180076CE06 /* Kingfisher.framework in Embed Frameworks */,
312
-				050D719222531B360076CE06 /* Alamofire.framework in Embed Frameworks */,
313
-				050D718E22531AF40076CE06 /* RxDataSources.framework in Embed Frameworks */,
314
-				050D7184225317AD0076CE06 /* PaiaiDataKit.framework in Embed Frameworks */,
298
+				05B87D4F228E900A0098FE87 /* PaiaiDataKit.framework in Embed Frameworks */,
315 299
 				050D7188225317AD0076CE06 /* Paiai_iOS.framework in Embed Frameworks */,
316 300
 				050D7182225317AD0076CE06 /* PaiaiUIKit.framework in Embed Frameworks */,
317 301
 			);
318 302
 			name = "Embed Frameworks";
319 303
 			runOnlyForDeploymentPostprocessing = 0;
320 304
 		};
305
+		05B87D5B228E94260098FE87 /* CopyFiles */ = {
306
+			isa = PBXCopyFilesBuildPhase;
307
+			buildActionMask = 2147483647;
308
+			dstPath = "";
309
+			dstSubfolderSpec = 10;
310
+			files = (
311
+			);
312
+			runOnlyForDeploymentPostprocessing = 0;
313
+		};
321 314
 /* End PBXCopyFilesBuildPhase section */
322 315
 
323 316
 /* Begin PBXFileReference section */
324
-		045F01541DED33DC00B80C87 /* Paiai.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Paiai.entitlements; sourceTree = "<group>"; };
325 317
 		0500C26421E8644E009A7013 /* NavigationBackViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationBackViewController.swift; sourceTree = "<group>"; };
326 318
 		0505ACF821DF104500404071 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
327 319
 		0505ACFA21DF106000404071 /* libsqlite3.0.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.0.tbd; path = usr/lib/libsqlite3.0.tbd; sourceTree = SDKROOT; };
@@ -334,15 +326,6 @@
334 326
 		0505B34F1F7E4B9A009E4ED2 /* NetworkApi.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkApi.swift; sourceTree = "<group>"; };
335 327
 		0506441E1F8D09C00035857E /* StatusModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusModel.swift; sourceTree = "<group>"; };
336 328
 		05087F6721B8F9530024A117 /* ContainerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContainerViewController.swift; sourceTree = "<group>"; };
337
-		050D718D22531AF40076CE06 /* RxDataSources.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxDataSources.framework; path = Carthage/Build/iOS/RxDataSources.framework; sourceTree = "<group>"; };
338
-		050D718F22531B180076CE06 /* Kingfisher.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Kingfisher.framework; path = Carthage/Build/iOS/Kingfisher.framework; sourceTree = "<group>"; };
339
-		050D719122531B360076CE06 /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Alamofire.framework; path = Carthage/Build/iOS/Alamofire.framework; sourceTree = "<group>"; };
340
-		050D719322531B440076CE06 /* Kingfisher.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Kingfisher.framework; path = Carthage/Build/iOS/Kingfisher.framework; sourceTree = "<group>"; };
341
-		050D719422531B520076CE06 /* ObjectMapper.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ObjectMapper.framework; path = Carthage/Build/iOS/ObjectMapper.framework; sourceTree = "<group>"; };
342
-		050D719622531B650076CE06 /* PullToRefresh.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PullToRefresh.framework; path = Carthage/Build/iOS/PullToRefresh.framework; sourceTree = "<group>"; };
343
-		050D719822531B780076CE06 /* RxCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxCocoa.framework; path = Carthage/Build/iOS/RxCocoa.framework; sourceTree = "<group>"; };
344
-		050D719A22531B860076CE06 /* RxSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxSwift.framework; path = Carthage/Build/iOS/RxSwift.framework; sourceTree = "<group>"; };
345
-		050D719C22531BA60076CE06 /* SQLite.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SQLite.framework; path = Carthage/Build/iOS/SQLite.framework; sourceTree = "<group>"; };
346 329
 		050E210F21B8CE8A008E1352 /* AppCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppCoordinator.swift; sourceTree = "<group>"; };
347 330
 		050E211121B8F2D4008E1352 /* HomeCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeCoordinator.swift; sourceTree = "<group>"; };
348 331
 		050E211321B8F39C008E1352 /* MineCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MineCoordinator.swift; sourceTree = "<group>"; };
@@ -372,17 +355,7 @@
372 355
 		05130FB421C9E7CE004EF1BE /* MessageItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageItem.swift; sourceTree = "<group>"; };
373 356
 		05130FB621C9E80F004EF1BE /* MessageListItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageListItem.swift; sourceTree = "<group>"; };
374 357
 		05130FBB21C9F707004EF1BE /* Cartfile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Cartfile; sourceTree = "<group>"; };
375
-		05130FBD21CA194B004EF1BE /* Differentiator.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Differentiator.framework; path = Carthage/Build/iOS/Differentiator.framework; sourceTree = "<group>"; };
376
-		05130FC221CA1997004EF1BE /* RxCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxCocoa.framework; path = Carthage/Build/iOS/RxCocoa.framework; sourceTree = "<group>"; };
377
-		05130FC321CA1997004EF1BE /* RxSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxSwift.framework; path = Carthage/Build/iOS/RxSwift.framework; sourceTree = "<group>"; };
378
-		05130FC421CA1997004EF1BE /* RxDataSources.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxDataSources.framework; path = Carthage/Build/iOS/RxDataSources.framework; sourceTree = "<group>"; };
379
-		05130FC521CA1997004EF1BE /* RxBlocking.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxBlocking.framework; path = Carthage/Build/iOS/RxBlocking.framework; sourceTree = "<group>"; };
380
-		05130FC621CA1997004EF1BE /* RxAtomic.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxAtomic.framework; path = Carthage/Build/iOS/RxAtomic.framework; sourceTree = "<group>"; };
381
-		05130FC721CA1997004EF1BE /* RxTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxTest.framework; path = Carthage/Build/iOS/RxTest.framework; sourceTree = "<group>"; };
382
-		05130FC821CA1997004EF1BE /* SQLite.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SQLite.framework; path = Carthage/Build/iOS/SQLite.framework; sourceTree = "<group>"; };
383
-		05130FC921CA1997004EF1BE /* ObjectMapper.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ObjectMapper.framework; path = Carthage/Build/iOS/ObjectMapper.framework; sourceTree = "<group>"; };
384 358
 		0513105F21CA1E53004EF1BE /* UIStoryboardExt.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIStoryboardExt.swift; sourceTree = "<group>"; };
385
-		0513106121CA22B5004EF1BE /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Alamofire.framework; path = Carthage/Build/iOS/Alamofire.framework; sourceTree = "<group>"; };
386 359
 		0513106821CA34D6004EF1BE /* GroupDetailCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupDetailCoordinator.swift; sourceTree = "<group>"; };
387 360
 		0513106A21CA3545004EF1BE /* PhotoDetailCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoDetailCoordinator.swift; sourceTree = "<group>"; };
388 361
 		0513107221CA3907004EF1BE /* ActionSheetView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActionSheetView.swift; sourceTree = "<group>"; };
@@ -395,13 +368,11 @@
395 368
 		0513109021CA3915004EF1BE /* NotificationExt.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NotificationExt.swift; sourceTree = "<group>"; };
396 369
 		0513109121CA3915004EF1BE /* QRCodeScanView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QRCodeScanView.swift; sourceTree = "<group>"; };
397 370
 		0513109221CA3915004EF1BE /* QRCodeConfiguration.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QRCodeConfiguration.swift; sourceTree = "<group>"; };
398
-		051310B321CB5EC3004EF1BE /* Kingfisher.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Kingfisher.framework; path = Carthage/Build/iOS/Kingfisher.framework; sourceTree = "<group>"; };
399 371
 		051310B721CB6958004EF1BE /* UserInfoStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserInfoStore.swift; sourceTree = "<group>"; };
400 372
 		051310BF21CB6EF4004EF1BE /* UserInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserInfo.swift; sourceTree = "<group>"; };
401 373
 		051FA6682276FA4300A5ECC2 /* BaseCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseCoordinator.swift; sourceTree = "<group>"; };
402 374
 		051FA66B2277F03700A5ECC2 /* LoginCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginCoordinator.swift; sourceTree = "<group>"; };
403 375
 		0521145321F083F20047C55A /* ToastView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ToastView.swift; sourceTree = "<group>"; };
404
-		052BF1C721E344020010D270 /* PullToRefresh.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PullToRefresh.framework; path = Carthage/Build/iOS/PullToRefresh.framework; sourceTree = "<group>"; };
405 376
 		0530951A221AB3EC00408D34 /* GroupDetailMemeberView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupDetailMemeberView.swift; sourceTree = "<group>"; };
406 377
 		0535D6D821D32A89008D9403 /* WXUserInfoRemoteAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WXUserInfoRemoteAPI.swift; sourceTree = "<group>"; };
407 378
 		0535D6DA21D32A9E008D9403 /* GuestUserInfoRemoteAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GuestUserInfoRemoteAPI.swift; sourceTree = "<group>"; };
@@ -484,6 +455,8 @@
484 455
 		05B2C62A21D750F1008063B3 /* FeedbackRemoteAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedbackRemoteAPI.swift; sourceTree = "<group>"; };
485 456
 		05B2C62E21D754BD008063B3 /* GroupDetailRemoteAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupDetailRemoteAPI.swift; sourceTree = "<group>"; };
486 457
 		05B2C63021D75A1B008063B3 /* ContentResource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentResource.swift; sourceTree = "<group>"; };
458
+		05B87D6C228E9F140098FE87 /* RxRelay.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxRelay.framework; path = Carthage/Build/iOS/RxRelay.framework; sourceTree = "<group>"; };
459
+		05B87D6E228EA2820098FE87 /* Differentiator.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Differentiator.framework; path = Carthage/Build/iOS/Differentiator.framework; sourceTree = "<group>"; };
487 460
 		05C0CEF821F8567C00993DE2 /* AlertView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertView.swift; sourceTree = "<group>"; };
488 461
 		05C0CEFA21F85A7700993DE2 /* ActionSheetController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionSheetController.swift; sourceTree = "<group>"; };
489 462
 		05C0D98D21D22119000B7B2A /* PhotoThumbupUserItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoThumbupUserItem.swift; sourceTree = "<group>"; };
@@ -508,6 +481,13 @@
508 481
 		05D3A3C521FF010900A29A20 /* WebViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebViewController.swift; sourceTree = "<group>"; };
509 482
 		05D3A3CC22000C3900A29A20 /* GroupCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupCoordinator.swift; sourceTree = "<group>"; };
510 483
 		05D3A3CF2200288400A29A20 /* Storyboarded.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Storyboarded.swift; sourceTree = "<group>"; };
484
+		05DFDBEB228BE53100F4A7F7 /* RxDataSources.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxDataSources.framework; path = Carthage/Build/iOS/RxDataSources.framework; sourceTree = "<group>"; };
485
+		05DFDBEC228BE53100F4A7F7 /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Alamofire.framework; path = Carthage/Build/iOS/Alamofire.framework; sourceTree = "<group>"; };
486
+		05DFDBED228BE53100F4A7F7 /* Kingfisher.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Kingfisher.framework; path = Carthage/Build/iOS/Kingfisher.framework; sourceTree = "<group>"; };
487
+		05DFDBEE228BE53100F4A7F7 /* RxSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxSwift.framework; path = Carthage/Build/iOS/RxSwift.framework; sourceTree = "<group>"; };
488
+		05DFDBEF228BE53100F4A7F7 /* RxCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxCocoa.framework; path = Carthage/Build/iOS/RxCocoa.framework; sourceTree = "<group>"; };
489
+		05DFDBF0228BE53100F4A7F7 /* PullToRefresh.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PullToRefresh.framework; path = Carthage/Build/iOS/PullToRefresh.framework; sourceTree = "<group>"; };
490
+		05DFDBF1228BE53200F4A7F7 /* ObjectMapper.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ObjectMapper.framework; path = Carthage/Build/iOS/ObjectMapper.framework; sourceTree = "<group>"; };
511 491
 		05E80E2F21DF65D4006368C4 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
512 492
 		05ED11C42251A90000FF3758 /* PhotoPurchaseRemoteAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoPurchaseRemoteAPI.swift; sourceTree = "<group>"; };
513 493
 		05ED11C62252165700FF3758 /* Notification+wxPay.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Notification+wxPay.swift"; sourceTree = "<group>"; };
@@ -574,20 +554,20 @@
574 554
 			isa = PBXFrameworksBuildPhase;
575 555
 			buildActionMask = 2147483647;
576 556
 			files = (
577
-				0505AD0521DF109E00404071 /* libz.tbd in Frameworks */,
578
-				0505AD0321DF108300404071 /* CFNetwork.framework in Frameworks */,
579
-				0505AD0121DF107D00404071 /* CoreTelephony.framework in Frameworks */,
580
-				0505ACFF21DF107600404071 /* Security.framework in Frameworks */,
581
-				0505ACFD21DF106F00404071 /* libc++.tbd in Frameworks */,
582
-				0505ACFB21DF106000404071 /* libsqlite3.0.tbd in Frameworks */,
583
-				0505ACF921DF104500404071 /* SystemConfiguration.framework in Frameworks */,
584
-				0513104C21CA1BAD004EF1BE /* SQLite.framework in Frameworks */,
585
-				0513104A21CA1BAD004EF1BE /* RxSwift.framework in Frameworks */,
586
-				0513104821CA1BAD004EF1BE /* RxCocoa.framework in Frameworks */,
587
-				0513106221CA22B6004EF1BE /* Alamofire.framework in Frameworks */,
588
-				0513104521CA1BAD004EF1BE /* ObjectMapper.framework in Frameworks */,
589
-				0513104921CA1BAD004EF1BE /* RxDataSources.framework in Frameworks */,
590
-				0572B2C621E2FB3E00EAD2A2 /* libWeChatSDK.a in Frameworks */,
557
+				05DFDC06228BE83A00F4A7F7 /* Security.framework in Frameworks */,
558
+				05BEBE62228E87C300541855 /* SystemConfiguration.framework in Frameworks */,
559
+				05DFDBFD228BE7CA00F4A7F7 /* Alamofire.framework in Frameworks */,
560
+				05BEBE60228E87B300541855 /* RxCocoa.framework in Frameworks */,
561
+				05DFDBFE228BE7CC00F4A7F7 /* Kingfisher.framework in Frameworks */,
562
+				05DFDBFF228BE7CE00F4A7F7 /* ObjectMapper.framework in Frameworks */,
563
+				05DFDC00228BE7E400F4A7F7 /* RxSwift.framework in Frameworks */,
564
+				05DFDC01228BE80000F4A7F7 /* libWeChatSDK.a in Frameworks */,
565
+				05DFDC02228BE81400F4A7F7 /* libz.tbd in Frameworks */,
566
+				05DFDC03228BE81C00F4A7F7 /* CFNetwork.framework in Frameworks */,
567
+				05DFDC04228BE82800F4A7F7 /* libsqlite3.0.tbd in Frameworks */,
568
+				05DFDC05228BE83500F4A7F7 /* CoreTelephony.framework in Frameworks */,
569
+				05DFDC07228BE84700F4A7F7 /* libc++.tbd in Frameworks */,
570
+				05DFDC08228BE8C600F4A7F7 /* RxDataSources.framework in Frameworks */,
591 571
 			);
592 572
 			runOnlyForDeploymentPostprocessing = 0;
593 573
 		};
@@ -595,13 +575,12 @@
595 575
 			isa = PBXFrameworksBuildPhase;
596 576
 			buildActionMask = 2147483647;
597 577
 			files = (
598
-				052BF1C921E344280010D270 /* PullToRefresh.framework in Frameworks */,
599 578
 				0513105E21CA1D95004EF1BE /* PaiaiUIKit.framework in Frameworks */,
600 579
 				0513105D21CA1D95004EF1BE /* PaiaiDataKit.framework in Frameworks */,
601
-				0513105021CA1BED004EF1BE /* RxSwift.framework in Frameworks */,
602
-				0513104E21CA1BED004EF1BE /* RxCocoa.framework in Frameworks */,
603
-				051310B521CB5EDD004EF1BE /* Kingfisher.framework in Frameworks */,
604
-				0513104F21CA1BED004EF1BE /* RxDataSources.framework in Frameworks */,
580
+				05DFDBF9228BE7A200F4A7F7 /* PullToRefresh.framework in Frameworks */,
581
+				05DFDBFA228BE7A700F4A7F7 /* RxCocoa.framework in Frameworks */,
582
+				05DFDBFB228BE7AA00F4A7F7 /* RxDataSources.framework in Frameworks */,
583
+				05DFDBFC228BE7AE00F4A7F7 /* RxSwift.framework in Frameworks */,
605 584
 			);
606 585
 			runOnlyForDeploymentPostprocessing = 0;
607 586
 		};
@@ -609,23 +588,25 @@
609 588
 			isa = PBXFrameworksBuildPhase;
610 589
 			buildActionMask = 2147483647;
611 590
 			files = (
612
-				050D717E2253162C0076CE06 /* RxDataSources.framework in Frameworks */,
591
+				05B87D6F228EA2820098FE87 /* Differentiator.framework in Frameworks */,
592
+				05B87D6D228E9F140098FE87 /* RxRelay.framework in Frameworks */,
613 593
 				0505AD0D21DF34E100404071 /* CoreTelephony.framework in Frameworks */,
594
+				05B87D64228E94F00098FE87 /* RxSwift.framework in Frameworks */,
614 595
 				0505AD0C21DF34B600404071 /* libsqlite3.0.tbd in Frameworks */,
596
+				05BEBE63228E87C700541855 /* SystemConfiguration.framework in Frameworks */,
597
+				05B87D5F228E94AA0098FE87 /* Kingfisher.framework in Frameworks */,
615 598
 				0505AD0B21DF348F00404071 /* libc++.tbd in Frameworks */,
599
+				05B87D60228E94AC0098FE87 /* ObjectMapper.framework in Frameworks */,
616 600
 				0505AD0A21DF347400404071 /* CFNetwork.framework in Frameworks */,
617 601
 				050D7187225317AD0076CE06 /* Paiai_iOS.framework in Frameworks */,
602
+				05B87D61228E94E90098FE87 /* PullToRefresh.framework in Frameworks */,
603
+				05B87D5E228E94A70098FE87 /* Alamofire.framework in Frameworks */,
618 604
 				0505AD0921DF345E00404071 /* Security.framework in Frameworks */,
605
+				05B87D62228E94EB0098FE87 /* RxCocoa.framework in Frameworks */,
619 606
 				0505AD0621DF342F00404071 /* libz.tbd in Frameworks */,
620 607
 				050D7181225317AD0076CE06 /* PaiaiUIKit.framework in Frameworks */,
608
+				05B87D63228E94EE0098FE87 /* RxDataSources.framework in Frameworks */,
621 609
 				050D7183225317AD0076CE06 /* PaiaiDataKit.framework in Frameworks */,
622
-				051310B421CB5EC3004EF1BE /* Kingfisher.framework in Frameworks */,
623
-				052BF1C821E344020010D270 /* PullToRefresh.framework in Frameworks */,
624
-				0513109C21CA4103004EF1BE /* Alamofire.framework in Frameworks */,
625
-				0513109F21CA4103004EF1BE /* ObjectMapper.framework in Frameworks */,
626
-				051310A221CA4103004EF1BE /* RxCocoa.framework in Frameworks */,
627
-				051310A421CA4103004EF1BE /* RxSwift.framework in Frameworks */,
628
-				051310A621CA4103004EF1BE /* SQLite.framework in Frameworks */,
629 610
 			);
630 611
 			runOnlyForDeploymentPostprocessing = 0;
631 612
 		};
@@ -1260,15 +1241,6 @@
1260 1241
 		6CEBD0F61CA8D680004DBDE0 = {
1261 1242
 			isa = PBXGroup;
1262 1243
 			children = (
1263
-				050D719A22531B860076CE06 /* RxSwift.framework */,
1264
-				050D719C22531BA60076CE06 /* SQLite.framework */,
1265
-				050D719822531B780076CE06 /* RxCocoa.framework */,
1266
-				050D719622531B650076CE06 /* PullToRefresh.framework */,
1267
-				050D719422531B520076CE06 /* ObjectMapper.framework */,
1268
-				050D719322531B440076CE06 /* Kingfisher.framework */,
1269
-				050D719122531B360076CE06 /* Alamofire.framework */,
1270
-				050D718F22531B180076CE06 /* Kingfisher.framework */,
1271
-				050D718D22531AF40076CE06 /* RxDataSources.framework */,
1272 1244
 				05130FBB21C9F707004EF1BE /* Cartfile */,
1273 1245
 				3864C06C1CAD27EC0048ADAD /* Swift-bridge.h */,
1274 1246
 				6CEBD1011CA8D680004DBDE0 /* Paiai */,
@@ -1295,7 +1267,6 @@
1295 1267
 		6CEBD1011CA8D680004DBDE0 /* Paiai */ = {
1296 1268
 			isa = PBXGroup;
1297 1269
 			children = (
1298
-				045F01541DED33DC00B80C87 /* Paiai.entitlements */,
1299 1270
 				6CEBD1021CA8D680004DBDE0 /* AppDelegate.swift */,
1300 1271
 				6CEBD10E1CA8D680004DBDE0 /* Info.plist */,
1301 1272
 				A69FFB8C1E7018CC0006FEE0 /* LaunchScreen.storyboard */,
@@ -1308,7 +1279,15 @@
1308 1279
 		7737858CEE753530C312F2CB /* Frameworks */ = {
1309 1280
 			isa = PBXGroup;
1310 1281
 			children = (
1311
-				052BF1C721E344020010D270 /* PullToRefresh.framework */,
1282
+				05B87D6E228EA2820098FE87 /* Differentiator.framework */,
1283
+				05B87D6C228E9F140098FE87 /* RxRelay.framework */,
1284
+				05DFDBEC228BE53100F4A7F7 /* Alamofire.framework */,
1285
+				05DFDBED228BE53100F4A7F7 /* Kingfisher.framework */,
1286
+				05DFDBF1228BE53200F4A7F7 /* ObjectMapper.framework */,
1287
+				05DFDBF0228BE53100F4A7F7 /* PullToRefresh.framework */,
1288
+				05DFDBEF228BE53100F4A7F7 /* RxCocoa.framework */,
1289
+				05DFDBEB228BE53100F4A7F7 /* RxDataSources.framework */,
1290
+				05DFDBEE228BE53100F4A7F7 /* RxSwift.framework */,
1312 1291
 				0505AD0421DF109E00404071 /* libz.tbd */,
1313 1292
 				0505AD0221DF108300404071 /* CFNetwork.framework */,
1314 1293
 				0505AD0021DF107D00404071 /* CoreTelephony.framework */,
@@ -1316,17 +1295,6 @@
1316 1295
 				0505ACFC21DF106E00404071 /* libc++.tbd */,
1317 1296
 				0505ACFA21DF106000404071 /* libsqlite3.0.tbd */,
1318 1297
 				0505ACF821DF104500404071 /* SystemConfiguration.framework */,
1319
-				051310B321CB5EC3004EF1BE /* Kingfisher.framework */,
1320
-				0513106121CA22B5004EF1BE /* Alamofire.framework */,
1321
-				05130FC921CA1997004EF1BE /* ObjectMapper.framework */,
1322
-				05130FC621CA1997004EF1BE /* RxAtomic.framework */,
1323
-				05130FC521CA1997004EF1BE /* RxBlocking.framework */,
1324
-				05130FC221CA1997004EF1BE /* RxCocoa.framework */,
1325
-				05130FC421CA1997004EF1BE /* RxDataSources.framework */,
1326
-				05130FC321CA1997004EF1BE /* RxSwift.framework */,
1327
-				05130FC721CA1997004EF1BE /* RxTest.framework */,
1328
-				05130FC821CA1997004EF1BE /* SQLite.framework */,
1329
-				05130FBD21CA194B004EF1BE /* Differentiator.framework */,
1330 1298
 			);
1331 1299
 			name = Frameworks;
1332 1300
 			sourceTree = "<group>";
@@ -1427,6 +1395,7 @@
1427 1395
 				05130F8A21C9E5E8004EF1BE /* Sources */,
1428 1396
 				05130F8B21C9E5E8004EF1BE /* Frameworks */,
1429 1397
 				05130F8C21C9E5E8004EF1BE /* Resources */,
1398
+				05B87D5B228E94260098FE87 /* CopyFiles */,
1430 1399
 			);
1431 1400
 			buildRules = (
1432 1401
 			);
@@ -1497,7 +1466,7 @@
1497 1466
 								enabled = 0;
1498 1467
 							};
1499 1468
 							com.apple.Keychain = {
1500
-								enabled = 1;
1469
+								enabled = 0;
1501 1470
 							};
1502 1471
 							com.apple.Maps.iOS = {
1503 1472
 								enabled = 0;
@@ -1564,6 +1533,7 @@
1564 1533
 			buildActionMask = 2147483647;
1565 1534
 			files = (
1566 1535
 				05E80E3021DF65D5006368C4 /* Assets.xcassets in Resources */,
1536
+				05BEBE3E228E51D800541855 /* LaunchScreen.storyboard in Resources */,
1567 1537
 			);
1568 1538
 			runOnlyForDeploymentPostprocessing = 0;
1569 1539
 		};
@@ -1575,8 +1545,9 @@
1575 1545
 			buildActionMask = 12;
1576 1546
 			files = (
1577 1547
 			);
1548
+			inputFileListPaths = (
1549
+			);
1578 1550
 			inputPaths = (
1579
-				"$(SRCROOT)/Carthage/Build/iOS/SQLite.framework",
1580 1551
 				"$(SRCROOT)/Carthage/Build/iOS/RxCocoa.framework",
1581 1552
 				"$(SRCROOT)/Carthage/Build/iOS/RxSwift.framework",
1582 1553
 				"$(SRCROOT)/Carthage/Build/iOS/RxDataSources.framework",
@@ -1584,21 +1555,24 @@
1584 1555
 				"$(SRCROOT)/Carthage/Build/iOS/Alamofire.framework",
1585 1556
 				"$(SRCROOT)/Carthage/Build/iOS/Kingfisher.framework",
1586 1557
 				"$(SRCROOT)/Carthage/Build/iOS/PullToRefresh.framework",
1558
+				"$(SRCROOT)/Carthage/Build/iOS/Differentiator.framework",
1559
+				"$(SRCROOT)/Carthage/Build/iOS/RxRelay.framework",
1587 1560
 			);
1588 1561
 			name = "Run Script";
1589 1562
 			outputPaths = (
1590
-				"$(DERIVED_FILE_DIR)/$(FRAMEWORKS_FOLDER_PATH)/SQLite.framework",
1591
-				"$(DERIVED_FILE_DIR)/$(FRAMEWORKS_FOLDER_PATH)/RxCocoa.framework",
1592 1563
 				"$(DERIVED_FILE_DIR)/$(FRAMEWORKS_FOLDER_PATH)/RxSwift.framework",
1593 1564
 				"$(DERIVED_FILE_DIR)/$(FRAMEWORKS_FOLDER_PATH)/RxDataSources.framework",
1594 1565
 				"$(DERIVED_FILE_DIR)/$(FRAMEWORKS_FOLDER_PATH)/ObjectMapper.framework",
1595 1566
 				"$(DERIVED_FILE_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Alamofire.framework",
1596 1567
 				"$(DERIVED_FILE_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Kingfisher.framework",
1597 1568
 				"$(DERIVED_FILE_DIR)/$(FRAMEWORKS_FOLDER_PATH)/PullToRefresh.framework",
1569
+				"$(DERIVED_FILE_DIR)/$(FRAMEWORKS_FOLDER_PATH)/RxCocoa.framework",
1570
+				"$(DERIVED_FILE_DIR)/$(FRAMEWORKS_FOLDER_PATH)/Differentiator.framework",
1571
+				"$(DERIVED_FILE_DIR)/$(FRAMEWORKS_FOLDER_PATH)/RxRelay.framework",
1598 1572
 			);
1599 1573
 			runOnlyForDeploymentPostprocessing = 0;
1600 1574
 			shellPath = /bin/sh;
1601
-			shellScript = "/usr/local/bin/carthage copy-frameworks\n";
1575
+			shellScript = "/usr/local/bin/carthage copy-frameworks\n\n#!/usr/bin/env bash\n\nAPP_PATH=\"${TARGET_BUILD_DIR}/${WRAPPER_NAME}\"\n\n# This script loops through the frameworks embedded in the application and\n# removes unused architectures.\nfind \"$APP_PATH\" -name '*.framework' -type d | while read -r FRAMEWORK\ndo\nFRAMEWORK_EXECUTABLE_NAME=$(defaults read \"$FRAMEWORK/Info.plist\" CFBundleExecutable)\nFRAMEWORK_EXECUTABLE_PATH=\"$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME\"\n\nif [ ! -f \"${FRAMEWORK_EXECUTABLE_PATH}\" ]; then\ncontinue\nfi\n\nif xcrun lipo -info \"${FRAMEWORK_EXECUTABLE_PATH}\" | grep --silent \"Non-fat\"; then\necho \"Framework non-fat, skipping: $FRAMEWORK_EXECUTABLE_NAME\"\ncontinue\nfi\n\necho \"Thinning framework $FRAMEWORK_EXECUTABLE_NAME\"\n\nEXTRACTED_ARCHS=()\n\nfor ARCH in $ARCHS\ndo\necho \"Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME\"\nxcrun lipo -extract \"$ARCH\" \"$FRAMEWORK_EXECUTABLE_PATH\" -o \"$FRAMEWORK_EXECUTABLE_PATH-$ARCH\"\nEXTRACTED_ARCHS+=(\"$FRAMEWORK_EXECUTABLE_PATH-$ARCH\")\ndone\n\necho \"Merging extracted architectures: ${ARCHS}\"\nxcrun lipo -o \"$FRAMEWORK_EXECUTABLE_PATH-merged\" -create \"${EXTRACTED_ARCHS[@]}\"\nrm \"${EXTRACTED_ARCHS[@]}\"\n\necho \"Replacing original executable with thinned version\"\nrm \"$FRAMEWORK_EXECUTABLE_PATH\"\nmv \"$FRAMEWORK_EXECUTABLE_PATH-merged\" \"$FRAMEWORK_EXECUTABLE_PATH\"\ndone\n";
1602 1576
 		};
1603 1577
 /* End PBXShellScriptBuildPhase section */
1604 1578
 
@@ -1912,6 +1886,10 @@
1912 1886
 				DYLIB_COMPATIBILITY_VERSION = 1;
1913 1887
 				DYLIB_CURRENT_VERSION = 1;
1914 1888
 				DYLIB_INSTALL_NAME_BASE = "@rpath";
1889
+				FRAMEWORK_SEARCH_PATHS = (
1890
+					"$(inherited)",
1891
+					"$(PROJECT_DIR)/Carthage/Build/iOS",
1892
+				);
1915 1893
 				GCC_C_LANGUAGE_STANDARD = gnu11;
1916 1894
 				INFOPLIST_FILE = PaiaiUIKit/Info.plist;
1917 1895
 				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
@@ -1952,7 +1930,12 @@
1952 1930
 				DYLIB_COMPATIBILITY_VERSION = 1;
1953 1931
 				DYLIB_CURRENT_VERSION = 1;
1954 1932
 				DYLIB_INSTALL_NAME_BASE = "@rpath";
1933
+				FRAMEWORK_SEARCH_PATHS = (
1934
+					"$(inherited)",
1935
+					"$(PROJECT_DIR)/Carthage/Build/iOS",
1936
+				);
1955 1937
 				GCC_C_LANGUAGE_STANDARD = gnu11;
1938
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
1956 1939
 				INFOPLIST_FILE = PaiaiUIKit/Info.plist;
1957 1940
 				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
1958 1941
 				IPHONEOS_DEPLOYMENT_TARGET = 10.0;
@@ -1967,6 +1950,7 @@
1967 1950
 				SKIP_INSTALL = YES;
1968 1951
 				SWIFT_VERSION = 5.0;
1969 1952
 				TARGETED_DEVICE_FAMILY = 1;
1953
+				VALID_ARCHS = "arm64 arm64e armv7s";
1970 1954
 				VERSIONING_SYSTEM = "apple-generic";
1971 1955
 				VERSION_INFO_PREFIX = "";
1972 1956
 			};
@@ -1994,12 +1978,14 @@
1994 1978
 				FRAMEWORK_SEARCH_PATHS = (
1995 1979
 					"$(inherited)",
1996 1980
 					"$(PROJECT_DIR)/Carthage/Build/iOS",
1981
+					"$(PROJECT_DIR)",
1997 1982
 				);
1998 1983
 				GCC_C_LANGUAGE_STANDARD = gnu11;
1999 1984
 				HEADER_SEARCH_PATHS = "";
2000 1985
 				INFOPLIST_FILE = PaiaiDataKit/Info.plist;
2001 1986
 				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
2002 1987
 				IPHONEOS_DEPLOYMENT_TARGET = 10.0;
1988
+				LD_GENERATE_MAP_FILE = YES;
2003 1989
 				LD_RUNPATH_SEARCH_PATHS = (
2004 1990
 					"$(inherited)",
2005 1991
 					"@executable_path/Frameworks",
@@ -2047,12 +2033,15 @@
2047 2033
 				FRAMEWORK_SEARCH_PATHS = (
2048 2034
 					"$(inherited)",
2049 2035
 					"$(PROJECT_DIR)/Carthage/Build/iOS",
2036
+					"$(PROJECT_DIR)",
2050 2037
 				);
2051 2038
 				GCC_C_LANGUAGE_STANDARD = gnu11;
2039
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
2052 2040
 				HEADER_SEARCH_PATHS = "";
2053 2041
 				INFOPLIST_FILE = PaiaiDataKit/Info.plist;
2054 2042
 				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
2055 2043
 				IPHONEOS_DEPLOYMENT_TARGET = 10.0;
2044
+				LD_GENERATE_MAP_FILE = YES;
2056 2045
 				LD_RUNPATH_SEARCH_PATHS = (
2057 2046
 					"$(inherited)",
2058 2047
 					"@executable_path/Frameworks",
@@ -2069,6 +2058,7 @@
2069 2058
 				SWIFT_OBJC_BRIDGING_HEADER = "";
2070 2059
 				SWIFT_VERSION = 5.0;
2071 2060
 				TARGETED_DEVICE_FAMILY = "1,2";
2061
+				VALID_ARCHS = "arm64 arm64e armv7s";
2072 2062
 				VERSIONING_SYSTEM = "apple-generic";
2073 2063
 				VERSION_INFO_PREFIX = "";
2074 2064
 			};
@@ -2094,6 +2084,7 @@
2094 2084
 				FRAMEWORK_SEARCH_PATHS = (
2095 2085
 					"$(inherited)",
2096 2086
 					"$(PROJECT_DIR)/Carthage/Build/iOS",
2087
+					"$(PROJECT_DIR)",
2097 2088
 				);
2098 2089
 				GCC_C_LANGUAGE_STANDARD = gnu11;
2099 2090
 				INFOPLIST_FILE = Paiai_iOS/Info.plist;
@@ -2112,6 +2103,7 @@
2112 2103
 				SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
2113 2104
 				SWIFT_VERSION = 5.0;
2114 2105
 				TARGETED_DEVICE_FAMILY = 1;
2106
+				VALID_ARCHS = "arm64 arm64e armv7s";
2115 2107
 				VERSIONING_SYSTEM = "apple-generic";
2116 2108
 				VERSION_INFO_PREFIX = "";
2117 2109
 			};
@@ -2138,8 +2130,10 @@
2138 2130
 				FRAMEWORK_SEARCH_PATHS = (
2139 2131
 					"$(inherited)",
2140 2132
 					"$(PROJECT_DIR)/Carthage/Build/iOS",
2133
+					"$(PROJECT_DIR)",
2141 2134
 				);
2142 2135
 				GCC_C_LANGUAGE_STANDARD = gnu11;
2136
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
2143 2137
 				INFOPLIST_FILE = Paiai_iOS/Info.plist;
2144 2138
 				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
2145 2139
 				IPHONEOS_DEPLOYMENT_TARGET = 10.0;
@@ -2154,6 +2148,7 @@
2154 2148
 				SKIP_INSTALL = YES;
2155 2149
 				SWIFT_VERSION = 5.0;
2156 2150
 				TARGETED_DEVICE_FAMILY = 1;
2151
+				VALID_ARCHS = "arm64 arm64e armv7s";
2157 2152
 				VERSIONING_SYSTEM = "apple-generic";
2158 2153
 				VERSION_INFO_PREFIX = "";
2159 2154
 			};
@@ -2209,6 +2204,7 @@
2209 2204
 				GCC_WARN_UNUSED_FUNCTION = YES;
2210 2205
 				GCC_WARN_UNUSED_VARIABLE = YES;
2211 2206
 				IPHONEOS_DEPLOYMENT_TARGET = 10.0;
2207
+				LD_GENERATE_MAP_FILE = YES;
2212 2208
 				MTL_ENABLE_DEBUG_INFO = YES;
2213 2209
 				ONLY_ACTIVE_ARCH = YES;
2214 2210
 				OTHER_LDFLAGS = (
@@ -2264,6 +2260,7 @@
2264 2260
 				GCC_WARN_UNUSED_FUNCTION = YES;
2265 2261
 				GCC_WARN_UNUSED_VARIABLE = YES;
2266 2262
 				IPHONEOS_DEPLOYMENT_TARGET = 10.0;
2263
+				LD_GENERATE_MAP_FILE = YES;
2267 2264
 				MTL_ENABLE_DEBUG_INFO = NO;
2268 2265
 				OTHER_LDFLAGS = (
2269 2266
 					"-Objc",
@@ -2284,17 +2281,17 @@
2284 2281
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
2285 2282
 				CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = NO;
2286 2283
 				CLANG_ENABLE_MODULES = NO;
2287
-				CODE_SIGN_ENTITLEMENTS = PaiAi/PaiAi.entitlements;
2288 2284
 				CODE_SIGN_IDENTITY = "iPhone Developer";
2289 2285
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
2290 2286
 				CODE_SIGN_STYLE = Automatic;
2291 2287
 				DEFINES_MODULE = YES;
2292
-				DEVELOPMENT_TEAM = RSJ4N8U2LM;
2288
+				DEVELOPMENT_TEAM = Q38447SL4M;
2293 2289
 				ENABLE_BITCODE = NO;
2294 2290
 				FRAMEWORK_SEARCH_PATHS = (
2295 2291
 					"$(inherited)",
2296 2292
 					"$(PROJECT_DIR)/Paiai",
2297 2293
 					"$(PROJECT_DIR)/Carthage/Build/iOS",
2294
+					"$(PROJECT_DIR)",
2298 2295
 				);
2299 2296
 				GCC_PREFIX_HEADER = "";
2300 2297
 				GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)";
@@ -2305,6 +2302,7 @@
2305 2302
 				);
2306 2303
 				INFOPLIST_FILE = PaiAi/Info.plist;
2307 2304
 				IPHONEOS_DEPLOYMENT_TARGET = 10.0;
2305
+				LD_GENERATE_MAP_FILE = YES;
2308 2306
 				LD_RUNPATH_SEARCH_PATHS = (
2309 2307
 					"$(inherited)",
2310 2308
 					"@executable_path/Frameworks",
@@ -2315,6 +2313,7 @@
2315 2313
 				);
2316 2314
 				MACH_O_TYPE = mh_execute;
2317 2315
 				ONLY_ACTIVE_ARCH = YES;
2316
+				OTHER_CODE_SIGN_FLAGS = "--deep";
2318 2317
 				OTHER_LDFLAGS = "-all_load";
2319 2318
 				OTHER_SWIFT_FLAGS = "-DDEBUG";
2320 2319
 				PRODUCT_BUNDLE_IDENTIFIER = com.PaiAi.PaiAi;
@@ -2335,18 +2334,19 @@
2335 2334
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
2336 2335
 				CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = NO;
2337 2336
 				CLANG_ENABLE_MODULES = NO;
2338
-				CODE_SIGN_ENTITLEMENTS = PaiAi/PaiAi.entitlements;
2339 2337
 				CODE_SIGN_IDENTITY = "iPhone Developer";
2340 2338
 				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
2341 2339
 				CODE_SIGN_STYLE = Automatic;
2342 2340
 				DEBUG_INFORMATION_FORMAT = dwarf;
2343 2341
 				DEFINES_MODULE = YES;
2344
-				DEVELOPMENT_TEAM = RSJ4N8U2LM;
2342
+				DEVELOPMENT_TEAM = Q38447SL4M;
2345 2343
 				FRAMEWORK_SEARCH_PATHS = (
2346 2344
 					"$(inherited)",
2347 2345
 					"$(PROJECT_DIR)/Paiai",
2348 2346
 					"$(PROJECT_DIR)/Carthage/Build/iOS",
2347
+					"$(PROJECT_DIR)",
2349 2348
 				);
2349
+				GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
2350 2350
 				GCC_PREFIX_HEADER = "";
2351 2351
 				HEADER_SEARCH_PATHS = (
2352 2352
 					"$(PROJECT_DIR)/Paiai/wxSDK/WXApi.h",
@@ -2355,6 +2355,7 @@
2355 2355
 				);
2356 2356
 				INFOPLIST_FILE = PaiAi/Info.plist;
2357 2357
 				IPHONEOS_DEPLOYMENT_TARGET = 10.0;
2358
+				LD_GENERATE_MAP_FILE = YES;
2358 2359
 				LD_RUNPATH_SEARCH_PATHS = (
2359 2360
 					"$(inherited)",
2360 2361
 					"@executable_path/Frameworks",
@@ -2365,6 +2366,7 @@
2365 2366
 				);
2366 2367
 				MACH_O_TYPE = mh_execute;
2367 2368
 				ONLY_ACTIVE_ARCH = YES;
2369
+				OTHER_CODE_SIGN_FLAGS = "--deep";
2368 2370
 				OTHER_LDFLAGS = "-all_load";
2369 2371
 				OTHER_SWIFT_FLAGS = "";
2370 2372
 				PRODUCT_BUNDLE_IDENTIFIER = com.PaiAi.PaiAi;
@@ -2374,6 +2376,7 @@
2374 2376
 				SWIFT_OBJC_BRIDGING_HEADER = "Swift-bridge.h";
2375 2377
 				SWIFT_VERSION = 5.0;
2376 2378
 				USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/**";
2379
+				VALID_ARCHS = "arm64 arm64e armv7s";
2377 2380
 			};
2378 2381
 			name = Release;
2379 2382
 		};

BIN
PaiAi/Paiai.xcodeproj/project.xcworkspace/xcuserdata/FFIB.xcuserdatad/UserInterfaceState.xcuserstate


+ 0 - 12
PaiAi/Paiai.xcodeproj/xcuserdata/FFIB.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -2,16 +2,4 @@
2 2
 <Bucket
3 3
    type = "1"
4 4
    version = "2.0">
5
-   <Breakpoints>
6
-      <BreakpointProxy
7
-         BreakpointExtensionID = "Xcode.Breakpoint.ExceptionBreakpoint">
8
-         <BreakpointContent
9
-            shouldBeEnabled = "Yes"
10
-            ignoreCount = "0"
11
-            continueAfterRunningActions = "No"
12
-            scope = "0"
13
-            stopOnStyle = "0">
14
-         </BreakpointContent>
15
-      </BreakpointProxy>
16
-   </Breakpoints>
17 5
 </Bucket>

+ 2 - 2
PaiAi/Paiai.xcodeproj/xcuserdata/FFIB.xcuserdatad/xcschemes/PaiAi.xcscheme

@@ -104,10 +104,10 @@
104 104
       </BuildableProductRunnable>
105 105
    </ProfileAction>
106 106
    <AnalyzeAction
107
-      buildConfiguration = "Debug">
107
+      buildConfiguration = "Release">
108 108
    </AnalyzeAction>
109 109
    <ArchiveAction
110
-      buildConfiguration = "Debug"
110
+      buildConfiguration = "Release"
111 111
       revealArchiveInOrganizer = "YES">
112 112
    </ArchiveAction>
113 113
 </Scheme>

BIN
PaiAi/Paiai/Assets.xcassets/.DS_Store


BIN
PaiAi/Paiai/Assets.xcassets/module/login/guide1.imageset/8778FB9773576108C6D5109F23D69C69.png


BIN
PaiAi/Paiai/Assets.xcassets/module/login/guide2.imageset/A4494A157AB20FA47B8B96993319B3E9.png


BIN
PaiAi/Paiai/Assets.xcassets/module/login/guide3.imageset/862B9012863929D278CBEF1E3A118E6D.png


+ 1 - 1
PaiAi/Paiai/Info.plist

@@ -62,7 +62,7 @@
62 62
 		</dict>
63 63
 	</array>
64 64
 	<key>CFBundleVersion</key>
65
-	<string>1</string>
65
+	<string>3</string>
66 66
 	<key>LSApplicationCategoryType</key>
67 67
 	<string></string>
68 68
 	<key>LSApplicationQueriesSchemes</key>

+ 0 - 10
PaiAi/Paiai/Paiai.entitlements

@@ -1,10 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8"?>
2
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
-<plist version="1.0">
4
-<dict>
5
-	<key>keychain-access-groups</key>
6
-	<array>
7
-		<string>$(AppIdentifierPrefix)com.Paiai.Paiai</string>
8
-	</array>
9
-</dict>
10
-</plist>

+ 6 - 7
PaiAi/PaiaiDataKit/DataLayer/Repositories/Remote/Reusable/NetWork/NetworkApi.swift

@@ -31,10 +31,7 @@ class NetworkApi {
31 31
             return
32 32
         }
33 33
 
34
-        if err.isSessionDeinitializedError
35
-            || err.isSessionInvalidatedError
36
-            || err.isInvalidURLError
37
-            || err.isRequestAdaptationError {
34
+        if err.isInvalidURLError {
38 35
             Toast.show(message: "客户端网络请求出错")
39 36
         } else if err.isParameterEncoderError || err.isParameterEncodingError {
40 37
             Toast.show(message: "客户端参数编码出错")
@@ -46,9 +43,11 @@ class NetworkApi {
46 43
             Toast.show(message: "服务器返回数据出错")
47 44
         } else if err.isServerTrustEvaluationError {
48 45
             Toast.show(message: "服务器验证错误")
49
-        } else if err.isRequestRetryError {
50
-            Toast.show(message: "客户端重试出错")
51
-        } else if err.isExplicitlyCancelledError {
46
+        }
47
+//        else if err.isRequestRetryError {
48
+//            Toast.show(message: "客户端重试出错")
49
+//        }
50
+        else if err.isExplicitlyCancelledError {
52 51
             return
53 52
         } else {
54 53
             Toast.show(message: "网络出现未知错误")

+ 9 - 3
PaiAi/PaiaiDataKit/DataLayer/Repositories/Remote/WXUserInfoRemoteAPI.swift

@@ -60,8 +60,8 @@ struct WXUserInfoRemoteAPI: UserInfoRemoteAPI {
60 60
                 }
61 61
                 switch errcode {
62 62
                 case 0:
63
-                    observer(.success(["appid": WXAppid, "secret": WXSecret,
64
-                                       "code": code, "grant_type": "authorization_code"]))
63
+                    return observer(.success(["appid": WXAppid, "secret": WXSecret,
64
+                                              "code": code, "grant_type": "authorization_code"]))
65 65
                 case -4:
66 66
                     Toast.show(message: "您拒绝授权,登录失败")
67 67
                 case -2:
@@ -89,12 +89,18 @@ struct WXUserInfoRemoteAPI: UserInfoRemoteAPI {
89 89
 
90 90
         return NetworkApi.share.get(resource: resource)
91 91
     }
92
+    
93
+    fileprivate func pareseWXUserInfo(json: JSON) -> [String: Any]? {
94
+        var data = json
95
+        data.removeValue(forKey: "privilege")
96
+        return data
97
+    }
92 98
 
93 99
     fileprivate func getWXUserInfo(param: [String: String]) -> Single<[String: Any]> {
94 100
         let resource = ContentResource<[String: Any]>(host: "https://api.weixin.qq.com",
95 101
                                                       path: .wxUserInfo,
96 102
                                                       parameter: param,
97
-                                                      parseJSON: { $0 })
103
+                                                      parseJSON: pareseWXUserInfo)
98 104
         return NetworkApi.share.get(resource: resource)
99 105
     }
100 106
 

+ 1 - 0
PaiAi/PaiaiDataKit/PaiaiDataKit.h

@@ -18,3 +18,4 @@ FOUNDATION_EXPORT const unsigned char PaiaiDataKitVersionString[];
18 18
 
19 19
 //微信SDK头文件
20 20
 #import "WXApi.h"
21
+#import "WechatAuthSDK.h"

+ 44 - 20
PaiAi/PaiaiDataKit/PresentLayer/PhotoDetail/PhotoDetailItemViewModel.swift

@@ -27,41 +27,65 @@ public final class PhotoDetailItemViewModel {
27 27
 
28 28
         self.item.subscribe(onNext: {[unowned self] (photoItem) in
29 29
             self.repository = PhotoDetailRepository(photoId: photoItem.photo_id, groupId: photoItem.group_id)
30
-            self.loadCommentItems().concat(self.loadThumbupUserItems()).subscribe(onCompleted: {
31
-                var val = self.item.value
32
-                val.comment_num = self.commentItems.value.count
33
-                val.thumbup_num = self.thumbupItems.value.count
34
-                self.item.accept(val)
35
-
36
-                let userInfo = [PhotoItemsOperator.key: PhotoItemsOperator.update(val.photo_id, val)]
37
-                NotificationCenter.default.post(name: .PhotoItemsChanged,
38
-                                                object: nil,
39
-                                                userInfo: userInfo)
40
-            }).disposed(by: self.disposeBag)
30
+            self.loadThumbupAndComment()
31
+//            Observable.zip(self.loadCommentItems(), self.loadThumbupUserItems()).subscribe(onNext: { _ in
32
+//                <#code#>
33
+//            }, onError: <#T##((Error) -> Void)?##((Error) -> Void)?##(Error) -> Void#>, onCompleted: <#T##(() -> Void)?##(() -> Void)?##() -> Void#>, onDisposed: <#T##(() -> Void)?##(() -> Void)?##() -> Void#>)
34
+//                .subscribe(onCompleted: {
35
+//
36
+//                var val = self.item.value
37
+//                val.comment_num = self.commentItems.value.count
38
+//                val.thumbup_num = self.thumbupItems.value.count
39
+//                self.item.accept(val)
40
+//
41
+//                let userInfo = [PhotoItemsOperator.key: PhotoItemsOperator.update(val.photo_id, val)]
42
+//                NotificationCenter.default.post(name: .PhotoItemsChanged,
43
+//                                                object: nil,
44
+//                                                userInfo: userInfo)
45
+//            }).disposed(by: self.disposeBag)
41 46
         }).disposed(by: disposeBag)
42 47
     }
43
-
44
-    private func loadThumbupUserItems() -> Completable {
45
-        return repository.loadThumbups().do(onSuccess: { (items) in
46
-            self.thumbupItems.accept(items)
47
-        }).asCompletable()
48
+    
49
+    private func loadThumbupAndComment() {
50
+        print(#function)
51
+        Single.zip(repository.loadComments(), repository.loadThumbups()).subscribe(onSuccess: {[unowned self] (commentItems, thumbupItems) in
52
+            self.commentItems.accept(commentItems)
53
+            self.thumbupItems.accept(thumbupItems)
54
+            self.update()
55
+        }).disposed(by: disposeBag)
56
+    }
57
+    
58
+    private func loadThumbupUserItems() -> Single<[PhotoThumbupUserItem]>  {
59
+        return repository.loadThumbups()
48 60
     }
49 61
 
50
-    private func loadCommentItems() -> Completable {
51
-        return repository.loadComments().do(onSuccess: { (items) in
52
-            self.commentItems.accept(items)
53
-        }).asCompletable()
62
+    private func loadCommentItems() -> Single<[PhotoCommentItem]>  {
63
+        return repository.loadComments()
64
+    }
65
+    
66
+    private func update() {
67
+        var val = self.item.value
68
+        val.comment_num = self.commentItems.value.count
69
+        val.thumbup_num = self.thumbupItems.value.count
70
+        let userInfo = [PhotoItemsOperator.key: PhotoItemsOperator.update(val.photo_id, val)]
71
+        NotificationCenter.default.post(name: .PhotoItemsChanged,
72
+                                        object: nil,
73
+                                        userInfo: userInfo)
54 74
     }
55 75
 
56 76
     public func submitThumbup() {
57 77
         repository.submitThumbup().subscribe(onSuccess: { items in
58 78
             self.thumbupItems.accept(items)
79
+            self.update()
59 80
         }).disposed(by: disposeBag)
60 81
     }
61 82
 
62 83
     public func submitComment(text: String) {
63 84
         repository.submitComment(text: text).subscribe(onSuccess: { (items) in
64 85
             self.commentItems.accept(items)
86
+            self.update()
65 87
         }).disposed(by: disposeBag)
66 88
     }
89
+    
90
+    
67 91
 }

+ 1 - 0
PaiAi/PaiaiDataKit/PresentLayer/PhotoDetail/PhotoDetailViewModel.swift

@@ -127,6 +127,7 @@ public final class PhotoDetailViewModel {
127 127
     }
128 128
 
129 129
     public func willShow(index: Int) {
130
+        print(index)
130 131
         currIndex = index
131 132
         _hasGetPrice.accept(false)
132 133
         itemViewModel.item.accept(_items.value[index])

+ 1 - 1
PaiAi/PaiaiUIKit/Reusable/UIKit/WaterfallFlowLayout/WaterfallFlowLayout.swift

@@ -125,7 +125,7 @@ public final class WaterfallFlowLayout: UICollectionViewLayout {
125 125
     }
126 126
     
127 127
     /// called at collectionView reload
128
-    func setNeedsLayout() {
128
+    public func setNeedsLayout() {
129 129
         isNeedLayout = true
130 130
     }
131 131
 }

+ 6 - 1
PaiAi/Paiai_iOS/App/Home/HomeViewController.swift

@@ -31,6 +31,10 @@ final class HomeViewController: UIViewController {
31 31
     override func viewDidAppear(_ animated: Bool) {
32 32
         super.viewDidAppear(animated)
33 33
     }
34
+    
35
+    override func viewDidDisappear(_ animated: Bool) {
36
+        super.viewDidDisappear(animated)
37
+    }
34 38
 
35 39
     func initalize() {
36 40
         collectionView.register(UINib(nibName: "PhotoCell",
@@ -95,7 +99,8 @@ fileprivate extension HomeViewController {
95 99
 
96 100
     func bindViewModelToRefreshing() {
97 101
         viewModel.isLoading
98
-            .subscribe(onNext: {[unowned self] flag in
102
+            .asDriver(onErrorJustReturn: true)
103
+            .drive(onNext: {[unowned self] flag in
99 104
                 if flag {
100 105
                     self.collectionView.endRefreshing(at: .top)
101 106
                 } else {